home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 003.dms / 003.adf / TEXT / chapter7.txt < prev    next >
Text File  |  1992-09-02  |  10KB  |  289 lines

  1.  
  2.               The Absolute Beginners Guide To Amos
  3.               -------------------------------------
  4.                          Chapter Seven
  5.                          -------------
  6.  
  7. Before we start here are the answers to the quiz in chapter six.
  8.  
  9.                        1. B      2. A
  10.                        3. C      4. A
  11.                        5. B      6. A
  12.                        7. A      8. B
  13.                        9. A     10. A
  14.  
  15. If you got less than five correct then please re-read the corresponding
  16. chapters. If you got five to eight correct you are doing great if you got
  17. nine or more congratulations and keep it up.
  18.  
  19.  
  20. ---------------------------------------------------------------------------
  21.  
  22. Now I think it`s time to learn some new commands I have picked out some
  23. commands that are fairly straight forward and some others that are a bit more
  24. complex but ones that you are going to need to know about.  You shouldn`t 
  25. have too much trouble with this lot, keep making those notes and refer to 
  26. them as much as needed.  I have been using Stos/Amos for quite a few years 
  27. now and I still refer to my note book, especially for things like the Amos
  28. file selector syntax, I can never remember how that goes.
  29. Anyway enough yapping let`s learn something new.
  30.  
  31.  
  32. BOOM
  33. ----
  34. This is fun, BOOM is one of three sound effects already built into Amos
  35. for us.  It doesn`t need any variables and is a stand alone command, you just
  36. simply put BOOM anywhere in your program that you want a BOOM sound such as
  37. an explosion for example.  Admittedly BOOM doesn`t sound that great but it is
  38. simple and memory efficient.
  39.  
  40. BELL
  41. ----
  42. The same as BOOM except giving a simple single bell sound.
  43.  
  44.  
  45. SHOOT
  46. -----
  47. Again the same as above but can be used as a gun firing sound effect.
  48. EXAMPLE7.Amos will give you an idea of how to use these effects.
  49.  
  50.  
  51. WAIT N
  52. -------
  53. This command is almost identical to WAIT KEY but more flexible, the N stands
  54. for a number, any number, for example, WAIT 50, would halt the program in 
  55. it`s tracks for one second and then continue.  
  56. WAIT has nothing to do with key presses or the user so put that out of your 
  57. mind now.  WAIT just WAITs around for N 50ths of a second, some examples:
  58.  
  59. WAIT 1    REM Wait for 1/50th of a second
  60.  
  61. WAIT 25   REM Wait for half a second
  62.  
  63. WAIT 50   REM wait for one second
  64.  
  65. WAIT 100  REM Wait for two seconds
  66.  
  67. WAIT 500  REM Wait for ten seconds.
  68.  
  69. And so on and so forth.
  70.  
  71.  
  72. RND (N)
  73. -------
  74. RND is short for RANDOM this smart little fellow generates RaNDom numbers for
  75. us in any range we want, I will explain by example:
  76.  
  77.  
  78. RND (5)     REM Will produce a random number from 0 to 4 (but not 5)
  79.  
  80.  
  81. RND (5)+1   REM Will give a random number from 1 to 5, it is the same as
  82.                 above but 1 is added to the result (+1)
  83.  
  84. RND (100)   REM Generates a random number from 0 to 99, if we wanted it to 
  85.                 include 100 in it`s calculations we just add a +1
  86.  
  87. RND (100)+1 REM Like this.
  88.  
  89.  
  90.   
  91. That`s all very well but to use a RaNDom number we will need to assign it to
  92. a variable so we can manipulate it, well luckily that is quite easy:
  93.  
  94. A=RND(5)     REM A equals a random number 0 to 4
  95.  
  96.  
  97. A=RND (5)+1  REM A equals a random number 1 to 5
  98.  
  99.  
  100. A=RND (100)  REM A equals a random number 0 to 99
  101.  
  102.  
  103. A=RND(100)+1 REM A equals a random number 1 to 100
  104.  
  105.  
  106. A, of course, can be any variable name you wish like GUESS or RN etc.
  107.  
  108. So, we have a variable containing a random number, we know the range of the
  109. number but we will have to interrogate the variable to find out the generated
  110. random number cos it won`t tell us unless we ask:
  111.  
  112. IF A=1 then BOOM   REM IF the variable A is equal to one then play the 
  113.                        BOOM sound effect.
  114.  
  115. Well that is one way of finding out if the random number is equal to one,
  116. but that approach is pretty limited.
  117.  
  118. Let`s suppose we have a simple guessing game where the computer generates
  119. a RaNDom number from 0 to 99, the user then INPUTS his guess and the 
  120. computer responds with a TOO LOW, TOO HIGH or CORRECT message.
  121. How do we get Amos to check for higher, lower and equal to the RaNDom number?
  122.  
  123.  
  124. IF GUESS=RN then bell  REM GUESS is the users INPUT, RN the computers
  125.                            RaNDom number, if equal sound the BELL effect.
  126.  
  127. It`s the equals sign that does it.
  128.  
  129.  
  130.  
  131. How about higher or lower?
  132.  
  133. IF GUESS>RN THEN  BOOM    REM If GUESS is more than the RaNDom number 
  134.                               THEN sound the BOOM effect.
  135.  
  136.  IF GUESS <RN THEN SHOOT   REM If GUESS is less than RN THEN SHOOT
  137.  
  138.  
  139.  
  140. Notice in the last example how close the line of code is to the actual
  141. English translation.
  142.  
  143.  
  144.  
  145. Here is the listing of the number guessing game which is EXAMPLE7.Amos
  146.  
  147.  
  148. REM Number Guess
  149. `
  150. `
  151. PAPER 0: HIDE : CLS 0
  152. SCORE=0
  153. L1:
  154. RN=RND(100)
  155. L2:
  156. CLS 0
  157. LOCATE 0,0: PRINT "SCORE ";score
  158. LOCATE 0,4: LINE INPUT "What is your guess? (0-99) ";guess
  159. IF GUESS=RN THEN LOCATE 0,20:PRINT "CORRECT":BELL:INC SCORE:WAIT 100: GOTO L1
  160. IF GUESS>RN THEN LOCATE 0,20: PRINT "TOO HIGH": SHOOT: WAIT 100: GOTO L2                                                                
  161. IF GUESS<RN THEN LOCATE 0,20: PRINT "TOO LOW": BOOM: WAIT 100:GOTO L2
  162. REM Amos will never get to this line! Do you know why?
  163.  
  164.  
  165. Don`t panic there are some new commands to cover here that we haven`t looked
  166. at yet, here is the breakdown of every part of EXAMPLE7.Amos, 
  167.  
  168. PAPER 0: HIDE: CLS 0
  169. --------------------
  170. We know all about these.
  171.  
  172.  
  173. SCORE=0
  174. -------
  175. Set the variable SCORE to 0.  We have covered variables previously.
  176.  
  177.  
  178. L1:
  179. ---
  180. Right this is the first part of the program we haven`t seen before.
  181. L1 is a Label it`s not a command as such, it is a marker, so that later on we
  182. can tell Amos to GOTO the marker if certain conditions are met.  
  183. The use of labels will become a lot clearer in a minute when we take a look 
  184. at the infamous GOTO instruction. 
  185. A few things to remember about labels is they must end in a colon, 
  186. like this,  LABEL: and they can contain any string of text or numbers 
  187. including the underscore character like this LABEL_1:
  188.  
  189.  
  190. RN=RND (100)
  191. -----------
  192. This line is explained earlier in this chapter.
  193.  
  194.  
  195. L2:
  196. --
  197. Is the second label, we have to make sure labels are not the same, we can`t
  198. have L1: twice so to keep it simple I`ve use L2:
  199.  
  200.  
  201. CLS 0
  202. -----
  203. You know what this does, if not look at EXAMPLE7.Amos
  204.  
  205.  
  206. LOCATE 0,0: 
  207. ----------
  208. Right this is a new command we haven`t yet covered.  LOCATE literally LOCATES
  209. the coordinates you give it and sets the text cursor to that position on the 
  210. screen and anything PRINTed after the LOCATE instruction will be PRINTed at
  211. the text coordinate supplied.  In the above line the coordinates we have
  212. supplied LOCATE with are 0 and 0 this means, starting from the top left edge
  213. of the screen, 0 across and 0 down so in effect we are telling Amos to set
  214. the PRINTing position to the top left edge of the screen.
  215.  
  216.  
  217.  
  218. PRINT "SCORE ";SCORE
  219. --------------------
  220. The next part of the line uncovers two features of Amos we have looked at 
  221. separately but not glued together in this form.  What is happening here is we
  222. Are telling the PRINT command to PRINT the word SCORE plus a space and then 
  223. telling Amos to get ready for a variable with the ; we then supply the 
  224. variable which is the SCORE variable we defined to 0 at the start of the
  225. program.  Can you work out what the screen would look like if SCORE=7?
  226. It would look like this:
  227.  
  228. SCORE 7  
  229.  
  230. If you thought it would look like this:
  231.  
  232. SCORE SCORE 7
  233.  
  234. Then you must understand that the first word is enclosed in quotes which as
  235. we discussed earlier means that Amos will PRINT exactly what is inside the 
  236. quotes the second word SCORE is a variable which in this example equalled
  237. 7 so Amos PRINTED the value of SCORE and not the string.
  238.  
  239.  
  240. LOCATE 0,4: 
  241. ----------
  242. The same as above but sets the PRINT position to 0 across 4 down.
  243.  
  244.  
  245. LINE INPUT "What is your guess? (0-99) ";guess
  246. ----------------------------------------------
  247. We have discussed LINE INPUT quiet thoroughly before, check your notes and
  248. read the REMs in EXAMPLE7.Amos
  249.  
  250.  
  251.  
  252. I shall break the next line up into two.
  253.  
  254. IF GUESS=RN THEN LOCATE 0,2: PRINT "CORRECT"
  255. --------------------------------------------
  256.  
  257. IF the variable GUESS (The players number, taken from the LINE INPUT)
  258. is equal to RN (RN is the RaNDom number generated earlier) THEN set the
  259. PRINT position to 0 cells across and 2 cells down the screen, then PRINT
  260. the string of characters in quotes "CORRECT"
  261.  
  262. BELL: INC SCORE: WAIT 100: GOTO L1
  263. ---------------------------------- 
  264. The second part of the line continues with, make the BELL sound, INCrement
  265. the players SCORE by one, wait 2 seconds then GOTO the label marked L1.
  266. Notice we didn`t have to say GOTO L1: (I.e. we didn`t have to use the colon)
  267. The GOTO command is the only stranger here and must be the most controversial
  268. command in any programming language ever.  Some hate to use it some don`t 
  269. care, some swear by it.  At this stage of your learning I wouldn`t worry 
  270. about it at all.  As far as I am concerned I will use a GOTO if it is 
  271. necessary or if it keeps the program simple.  Sometime In the future I guess 
  272. you will come to your own decision about using the GOTO command or not.  
  273. Personally I can`t see what all the fuss is about. So basically GOTO simply 
  274. goes to the label you have told it to and carries on executing the program 
  275. from there.
  276.  
  277. Everything in the next two lines of the program have been explained.
  278.  
  279. So that wraps up this chapter, I hope you remembered to take notes on this
  280. lot as we have exams coming up for you very soon! 
  281.  
  282. Now is a good time to load up EXAMPLE7.Amos.
  283.  
  284.  
  285. End of chapter seven.
  286.  
  287.  
  288.   
  289.